package cl.tinet.trainee.tarea6b.ejb;

import java.util.ArrayList;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import cl.tinet.trainee.tarea6b.dao.SalaDAO;
import cl.tinet.trainee.tarea6b.dao.SalaImpDAO;
import cl.tinet.trainee.tarea6b.model.Sala;

/**
 * Clase que implementa los metodos de la interfaz InterfazUsuarioBean.
 * 
 * @author Jose Ignacio
 * 
 */
@Stateless(mappedName = "salaBean", name = "salaBean")
public class SalaBeanImpl implements SalaBean {
    /**
     * Manejador de entidad y contexto de persistencia de los datos.
     */
    @PersistenceContext(unitName = "MySqlDS")
    private EntityManager em;
    /**
     * 
     */
    private SalaImpDAO dao;

    /**
     * Instanciador de nuevo Entity Manager para cada acceso a la clase.
     */
    @PostConstruct
    public void init() {
        dao = new SalaDAO(em);
    }

    /**
     * {@inheritDoc}
     */
    public void agregarSala(Sala nuevaSala) {
        Sala sala = buscarSalaAgregado(nuevaSala);
        if (sala != null) {
            System.out.println("Sala ya existe: " + nuevaSala.getNombre());
        } else {
            dao.agregar(nuevaSala);
        }
    }

    /**
     * {@inheritDoc}
     */
    public void borrarSala(Sala salaAEliminar) {
        if (buscarSala(salaAEliminar) == null) {
            System.out.println("Sala no encontrada: " + salaAEliminar.getNombre());
        } else {
            dao.borrar(salaAEliminar);
        }
    }

    /**
     * {@inheritDoc}
     */
    public void actualizarSala(Sala salaAActualizar) {
        if (buscarSala(salaAActualizar) == null) {
            System.out.println("Sala no encontrada: " + salaAActualizar.getNombre());
        } else {
            dao.actualizar(salaAActualizar);
        }
    }

    /**
     * {@inheritDoc}
     */
    public Sala leerSala(String username) {
        return (dao.leer(username));
    }

    /**
     * {@inheritDoc}
     */
    public Sala buscarSala(Sala salaABuscar) {

        dao.buscar(salaABuscar);
        return (dao.buscar(salaABuscar));
    }

    /**
     * {@inheritDoc}
     */
    public Sala buscarSalaAgregado(Sala salaABuscar) {
        Sala sala = null;
        sala = dao.buscar(salaABuscar);
        return sala;
    }

    /**
     * {@inheritDoc}
     */
    public ArrayList<Sala> listarSalas() {
        return dao.listar();
    }

}
